package com.qining618.cms.ucenter.mapper;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qining618.cms.ucenter.domain.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.Map;

/**
 * <p>
 * 用户 Mapper 接口
 * </p>
 *
 * @author qining
 * @date 2019-09-16
 */
@Mapper
@Repository
public interface UserMapper extends BaseMapper<User> {

    /**
     * 根据手机号获取用户信息
     * @param mobile 手机号
     * @return User
     */
    @Select("select * from o_user where mobile = #{mobile}")
    User getByMobile(@Param("mobile") String mobile);

    /**
     * 分页查询
     * @param page 分页信息
     * @param params 参数
     * @return IPage
     */
    IPage<User> pageAdmin(Page<User> page, @Param("map")Map<String, Object> params);

    /**
     * 用户名是否存在
     * @param username 用户名
     * @return boolean
     */
    @Select("select count(1) from o_user where username = #{username}")
    boolean existByUsername(@Param("username") String username);

    /**
     * 手机号是否存在
     * @param mobile 手机号
     * @return boolean
     */
    @Select("select count(1) from o_user where mobile = #{mobile}")
    boolean existByMobile(@Param("mobile") String mobile);

    /**
     * 获取用户手机号
     * @param userId 用户id
     * @return string 手机号
     */
    @Select("select mobile from o_user where id = #{userId}")
    String getMobileByUserId(@Param("userId") Long userId);

    /**
     * 根据手机号获取用户id
     * @param mobile 手机号
     * @return Long userId
     */
    @Select("select id from o_user where mobile = #{mobile}")
    Long getUserIdByMobile(@Param("mobile") String mobile);

    /**
     * 添加今日留言数
     * @param userId 用户id
     * @param num 数量
     * @return 操作数量
     */
    @Update("update o_user set today_comment_total = today_comment_total + #{num} where id = #{userId}")
    int incTodayCommentTotal(@Param("userId") Long userId, @Param("num") Integer num);

    /**
     * 更新登录信息
     * @param userId 用户id
     * @param date 时间
     * @param ip 客户端ip
     * @return 操作数量
     */
    int updateLoginSuccess(@Param("userId") Long userId, @Param("date") Date date, @Param("ip") String ip);

    /**
     * 解冻
     * @param userId 用户id
     * @return 操作数量
     */
    @Update("update o_user set is_freeze = 0, freeze_time = null, freeze_due_time = null, freeze_reason = '' where id = #{userId}")
    int unFreeze(@Param("userId") Long userId);
}
